authenticatedSecurityIdentityEditPopup = null;

function showIdentityModifyPopup()
{
	var popupContents = '<div class="maincontent">' +
	'<div class="contentinner content-editprofile">' +
		'<h4 class="widgettitle nomargin">계정 편집</h4>' +
			'<div class="widgetcontent bordered" style="overflow: auto; height: 522px;">' +
				'<form id="identityForm" class="stdform" method="post">' +
					'<input type="hidden" name="identityId" />' +
					'<input type="hidden" name="authorityKey" />' +
					'<input type="hidden" name="expired" />' +
					'<input type="hidden" name="locked" />' +
					'<input type="hidden" name="credentialExpired" />' +
					'<input type="hidden" name="enabled" />' +
					'<div class="alert alert-success">' +
						'<button data-dismiss="alert" class="close" type="button">×</button>' +
						'<strong>저장 완료!</strong> 계정 정보가 정상적으로 저장되었습니다.' +
					'</div>' +
					'<div class="alert alert-block">' +
						'<button data-dismiss="alert" class="close" type="button">×</button>' +
						'<h4>오류 발생!</h4>' +
						'<p></p>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">계정 아이디</label>' +
						'<div class="controls">' +
						 	'<input type="text" name="securityId" class="input-xlarge" placeholder="" readonly="readonly" />' +
						 '</div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">현재 비밀번호</label>' +
						'<div class="controls"><input type="password" name="securityPassword" class="input-small" placeholder="" /></div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">새로운 비밀번호</label>' +
						'<div class="controls"><input type="password" name="renewPassword" class="input-small" placeholder="" /></div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">새로운 비밀번호 확인</label>' +
						'<div class="controls"><input type="password" name="renewPasswordCheck" class="input-small" placeholder="" /></div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">이름</label>' +
						'<div class="controls">' +
							'<input type="text" name="name" class="input-small" placeholder="" />' +
						'</div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label" for="email">이메일</label>' +
						'<div class="controls">' +
							'<input type="text" name="email" id="email" class="input-xlarge" />' +
						'</div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">일반 전화</label>' +
						'<div class="controls">' +
							'<input type="text" name="phoneNumber" class="input-large" placeholder="" />' +
						'</div>' +
					'</div>' +
					'<div class="par control-group">' +
						'<label class="control-label">휴대 전화</label>' +
						'<div class="controls">' +
							'<input type="text" name="cellNumber" class="input-large" placeholder="" />' +
						'</div>' +
					'</div>' +
					'<p class="stdformbutton">' +
						'<button type="submit" id="submitButton" class="btn btn-primary">저장</button>' +
					'</p>' +
				'</form>' +
			'</div><!--widgetcontent-->' +
		'</div><!--contentinner-->' +
	'</div><!--maincontent-->';

	popupContents = popupContents.format(contextPath);
	
	authenticatedSecurityIdentityEditPopup = jQuery(this).speedoPopup(
	{
		theme : 'default',
		width : 680,
		height : 602,
		onShow : authenticatdIdentityEditPopupShown,
		onComplete : authenticatedIdentityEditPopupCompleted,
		/*onClose : editPopupClosed,*/
		htmlContent : popupContents
	});
};

function authenticatdIdentityEditPopupShown(event)
{
	jQuery.ajax(
	{
		url : '{0}/security/identity/get/authenticated'.format(contextPath),
		type : 'post',
		cache : false,
		dataType : 'json',
		success : getAuthenticatedIdentityCallback
	});
}

function authenticatedIdentityEditPopupCompleted(event)
{
	jQuery('.alert-success').hide();
	jQuery('.alert-block').hide();
	
	jQuery('#submitButton').click(updateIdentity);
}

function getAuthenticatedIdentityCallback(data)
{
	jQuery('input[name="identityId"]').val(data.identity.identityId);
	jQuery('input[name="authorityKey"]').val(data.identity.authorityKey);
	jQuery('input[name="expired"]').val(data.identity.expired);
	jQuery('input[name="locked"]').val(data.identity.locked);
	jQuery('input[name="credentialExpired"]').val(data.identity.credentialExpired);
	jQuery('input[name="enabled"]').val(data.identity.enabled);
	jQuery('input[name="securityId"]').val(data.identity.securityId);
	jQuery('input[name="name"]').val(data.identity.name);
	jQuery('input[name="phoneNumber"]').val(data.identity.phoneNumber);
	jQuery('input[name="cellNumber"]').val(data.identity.cellNumber);
	jQuery('input[name="email"]').val(data.identity.email);
}

/**
 * 유효성을 판단하고 보안 계정 정보를 저장하기 위해 서버로 요청한다.
 * @returns {Boolean} 중복 검사를 실행하지 않았거나 사용 중인 계정 아이디가 입력된 경우 false가 반환된다.
 */
function updateIdentity(event)
{
	jQuery('#submitButton').attr('disabled', true);
	
	jQuery.ajax(
	{
		url : '{0}/security/identity/update'.format(contextPath),
		type : 'post',
		cache : false,
		data : jQuery('#identityForm').serialize(),
		dataType : 'json',
		success : updateIdentityCallback
	});
	
	return false;
}

/**
 * 보안 계정 정보 저장 콜백이 실행된다.
 * @param data 보안 계정 정보 저장 결과가 전달된다.
 */
function updateIdentityCallback(data)
{
	switch (data.result)
	{
		case true:
			
			jQuery('.alert-success').fadeIn(2000, function()
			{
				$('.alert-success').fadeOut(3500, function()
				{
					authenticatedSecurityIdentityEditPopup.close();
				});
			});
			
			break;
			
		case false:
			
			jQuery('.alert-block').children('p').text(data.errorMessage);
			jQuery('.alert-block').fadeIn(2000, function() { $('.alert-block').fadeOut(3500); });
			
			switch (data.errorCode)
			{
				// 기존 암호가 입력되지 않은 경우
				case 1:
				
					jQuery('input[name="securityPassword"]').val('');
					jQuery('input[name="securityPassword"]').focus();
					
					break;
					
				// 새로운 암호가 입력되지 않은 경우
				case 2:
					
					jQuery('input[name="renewPassword"]').val('');
					jQuery('input[name="renewPassword"]').focus();
					
					break;
					
				// 새로운 암호 확인이 입력되지 않은 경우
				case 3:
					
					jQuery('input[name="renewPasswordCheck"]').val('');
					jQuery('input[name="renewPasswordCheck"]').focus();
					
					break;
					
				// 새로운 암호와 확인이 동일하지 않은 경우
				case 4:
					
					jQuery('input[name="renewPassword"]').val('');
					jQuery('input[name="renewPasswordCheck"]').val('');
					jQuery('input[name="renewPassword"]').focus();
					
					break;
					
				// 이름이 입력되지 않은 경우
				case 5:
					
					jQuery('input[name="name"]').val('');
					jQuery('input[name="name"]').focus();
					
					break;
					
				// 기존 암호가 틀리게 입력된 경우
				case 6:
					
					jQuery('input[name="securityPassword"]').val('');
					jQuery('input[name="securityPassword"]').focus();
					
					break;
			}
			
			break;
	}
	
	jQuery('#submitButton').removeAttr('disabled');
}